package com.cheer.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cheer.common.Page;
import com.cheer.common.PageInfo;
import com.cheer.dto.*;
import com.cheer.entity.OaUserEntity;
import com.cheer.vo.*;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Objects;

/**
 * 用户信息
 *
 * @author cheer
 */
public interface OaUserService extends IService<OaUserEntity> {

    /**
     * 查询用户Id
     */
    Integer getIdByOpenid(String openid);

    /**
     * 查询用户姓名
     */
    String getUsernameById(Integer id);

    /**
     * 退还购物积分
     */
    void refundCredit(Integer id, Integer credit);

    /**
     * 查询购物积分
     */
    Integer getShoppingCredit(Integer id);

    /**
     * 消耗积分
     */
    void consumeCredit(Integer userId, int credit);

    /**
     * 查询积分
     */
    CreditVO getCredit(Integer id);

    /**
     * 分页查询用户
     */
    Page<OaUserListVO> list(OaUserQueryDTO userQueryDTO);

    /**
     * 查询用户详情
     */
    OaUserInfoVO info(Integer id);

    /**
     * 查询用户的openid
     */
    String getOpenidById(Integer id);

    /**
     * 查询学习排名
     */
    Page<OaRankListVO> rank(OaRankQueryDTO rankQueryDTO);

    /**
     * 根据openid查询用户
     */
    List<OaUserEntity> listByOpenids(List<String> openids);

    /**
     * 查询用户详情
     */
    OaUserFrontInfoVO frontInfo(Integer id);

    /**
     * 修改用户
     */
    void update(OaUserUpdateDTO userUpdateDTO);

    /**
     * 下载用户列表
     */
    void download(OaUserQueryDTO oaUserQueryDTO, HttpServletResponse response);

    /**
     * 查询排名
     */
    OaRankVO rankInfo(String type, Integer userId);

    /**
     * 查询排名
     */
    List<OaRankItemVO> rankRange(Integer pageNum, Integer pageSize, String type);

    /**
     * 下载排名
     */
    void downloadRank(OaRankQueryDTO rankQueryDTO, HttpServletResponse response);

    /**
     * 查询用户
     */
    OaUserEntity getByOpenid(String openid);

    /**
     * 添加积分
     */
    void addCredit(Integer id, Integer credit);

    String getUpdateTimeById(Integer id);

    void updateHead(Integer id, String headimgurl);

    void updatePathByDepartment(Integer department, String path);

    OaCertVO cert(Integer userId);

    void updateCert(OaCertDTO oaCertDTO);

    String change(OaUserChangeDTO userChangeDTO, HttpSession session);

    Integer transfer(String checkCode, HttpSession session);

    /**
     * 获取排名 不包含列表
     * @param userId
     * @return
     */
    CreditRankVO getRank(Integer userId);

    /**
     * 执行消费
     * @param userId 用户ID
     * @param token 代币
     * @param exchangeType 类型
     */
    void consume(Integer userId, int token, Integer exchangeType);

    /**
     * 增加积分并且消费小红花
     * @param userId
     * @param consumeIntegral
     * @param exchangeNum
     */
    void addFlower(Integer userId, Integer consumeIntegral, Integer exchangeNum);

    /**
     * 退还小红花
     * @param userId
     * @param consumeCredit
     */
    void refundFlower(Integer userId, int consumeCredit);

    /**
     * 根据用户名和手机号
     * @param name
     * @param phone
     * @return
     */
    List<OaUserEntity> getByUserNameAndPhone(String name, String phone);

    /**
     * 机关学习人员列表
     * @param organDto
     * @return
     */
    PageInfo<OaLearnOrgan> getOrganList(OaLearnOrganDto organDto);

    List<String> getOrganDeptList();

    void downloadOrgan(OaLearnOrganDto organDto, HttpServletResponse response);
}

